package pe.org.cnl.congreso.util;

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

public class ExcelUtil {

	/**
	* Este metodo lle la data de un excel y la carga en listas.<br>
	* Cada fila es una lista y se tiene una lista principal que contiene
	* a todas las filas.<br>
	* Si una celda esta en blanco se omite y se sigue por la siguiente, 
	* si se quiere dar efecto estilo matriz las celdas vacias deberan 
	* tener un caracter que las identifique como vacias y las cuente 
	* como celdas vacias.
	* @param fileName - Nombre del archivo excel
	*/
	public static List<List<String>> excelToList(String fileName){
		try{
			FileInputStream fileInputStream = new FileInputStream(fileName);
			return excelToList(fileInputStream );
		}catch (Exception e){
			e.printStackTrace();
			return null;
		}	
	}
	/**
	* Este metodo lle la data de un excel y la carga en listas.<br>
	* Cada fila es una lista y se tiene una lista principal que contiene
	* a todas las filas.<br>
	* Si una celda esta en blanco se omite y se sigue por la siguiente, 
	* si se quiere dar efecto estilo matriz las celdas vacias deberan 
	* tener un caracter que las identifique como vacias y las cuente 
	* como celdas vacias.
	* @param file - archivo binario
	*/
	public static List<List<String>> excelToList(FileInputStream file){
		List<List<String>> cellDataList = new ArrayList<List<String>>();
		try{
			POIFSFileSystem fsFileSystem = new POIFSFileSystem(file);
			HSSFWorkbook workBook = new HSSFWorkbook(fsFileSystem);
			HSSFSheet hssfSheet = workBook.getSheetAt(0);
			Iterator<Row> rowIterator = hssfSheet.rowIterator();
			while (rowIterator.hasNext()){
				HSSFRow hssfRow = (HSSFRow) rowIterator.next();
				Iterator<Cell> iterator = hssfRow.cellIterator();
				List<String> cellTempList = new ArrayList<String>();
				while (iterator.hasNext()){
					HSSFCell hssfCell = (HSSFCell) iterator.next();
					cellTempList.add(hssfCell.toString());
				}
				cellDataList.add(cellTempList);
			}
		}catch (Exception e){
			e.printStackTrace();
		}
		return cellDataList;
	}
	
	public  static void printToConsole(List<List<String>> cellDataList){
		System.out.println("=START=");
		for (List<String> cellTempList: cellDataList ){
			for (String  hssfCell : cellTempList ){
				System.out.print(hssfCell + "\t");
			}
			System.out.println();
		}
		System.out.println("=END=");
	}
	
}
